home *** CD-ROM | disk | FTP | other *** search
- /* check the library ordering */
-
- #include "stdio.h"
-
- int last_def;
- char word[100];
-
- main(argc, argv) char *argv[]; {
- int i;
- char *getword();
- FILE *fp;
- if ((fp = fopen(argv[1], "r")) == NULL) {
- printf("can't open %s\n", argv[1]);
- exit(0);
- }
- while (getword(fp, word)) {
- if (strcmp(word, ":") == 0) {
- define(getword(fp, word));
- }
- else if (strcmp(word, "jsr") == 0) {
- use(getword(fp, word));
- }
- else if (word[0] == 'l' && word[1] == 'g') {
- use(getword(fp, word));
- }
- else if (word[0] == 's' && word[1] == 'g') {
- getword(fp, word);
- use(getword(fp, word));
- }
- }
- }
-
- char *
- getword(fp, s) FILE *fp; char *s; {
- int c;
- char *r = s;
- c = getc(fp);
- while (c != EOF && c <= ' ')
- c = getc(fp);
- if (c == EOF) return NULL;
- while (c != EOF && c > ' ') {
- *s++ = c;
- c = getc(fp);
- }
- *s = 0;
- return r;
- }
-
- #define S_NIL 0
- #define MAXSYM 10000
- #define MAXSPC 20000 /* max symbol space */
-
- char sym[MAXSPC]; /* space for symbols */
- int lsym = 0; /* end of symbol space */
- char *symptr[MAXSYM]; /* pointer to the symbol string */
- int symtype[MAXSYM]; /* type of the symbol */
- int symval[MAXSYM]; /* value of a symbol */
-
- lookup(nm) char *nm; {
- int i, start;
- start = i = *nm;
- while (symptr[i]) {
- if (strcmp(nm, symptr[i]) == 0) return i;
- i++;
- if (i == MAXSYM) i = 0;
- if (i == start) {
- fprintf(stderr, "symbol table full");
- return 0;
- }
- }
- symptr[i] = &sym[lsym];
- while (sym[lsym++] = *nm++)
- ;
- sym[lsym++] = 0;
- symtype[i] = symval[i] = 0;
- if (lsym >= MAXSPC) {
- fprintf(stderr, "symbol space full");
- return 0;
- }
- return i;
- }
-
- define(s) char *s; {
- int id;
- if (s != NULL) {
- /* printf("define %s\n", s); */
- last_def = id = lookup(s);
- symval[id] = 1;
- }
- }
-
- use(s) char *s; {
- int id;
- if (s != NULL) {
- /* printf(" using %s in %s\n", s, symptr[last_def]); */
- id = lookup(s);
- if (symval[id])
- printf("%s should come after %s\n",
- s, symptr[last_def]);
- }
- }
-
-